package info.sean.util;


import java.util.ArrayList;
import java.util.List;

/**
 * 数据分片公共方法
 * @author Kim
 */
//@Component
public class SplitListUtils {


    public static  <T> List<List<T>> splitListData(Integer size, List<T> data) {
        List<List<T>> result = new ArrayList<>();
        int dataSize = data.size();
        if (dataSize <= size) {
            result.add(data);
        } else {
            int len = dataSize / size;
            int mo = dataSize % size;
            if (mo > 0)
                len++;
            else
                mo = size;

            int i = 0;
            while (i < len) {
                int start = i * size;
                if (i == (len - 1))
                    result.add(data.subList(start, start + mo));
                else
                    result.add(data.subList(start, start + size));
                i++;
            }
        }
        return result;
    }

    /**
     * 数据分片
     * @param count
     * @return
     */
//    public PageableRequest[] getPages(Integer size, Long count, PageableRequest request) {
//        PageableRequest[] arr;
//        if (count < size) {
//            PageableRequest page = this.mapperFacade.map(request, request.getClass());
//            page.setPageNum(0);
//            page.setPageSize(size);
//            return new PageableRequest[]{page};
//        }
//
//        int len = (int) (count / size);
//        int mo = (int) (count % size);
//        if (mo > 0)
//            len++;
//
//        arr = new PageableRequest[len];
//        for (int i = 0; i < len; i++) {
//            PageableRequest page = this.mapperFacade.map(request, request.getClass());
//            page.setPageNum(i);
//            page.setPageSize(size);
//            arr[i] = page;
//        }
//        return arr;
//    }
//
//	public QueryDebitByPageRequest[] getPagesById(Integer size,List<Long> ids , Long count, QueryDebitByPageRequest request) {
//
//		QueryDebitByPageRequest[] arr;
//		if (count < size) {
//			QueryDebitByPageRequest page = this.mapperFacade.map(request, request.getClass());
//			page.setPageNum(0);
//			page.setPageSize(size);
//			page.setIds(ids);
//			return new QueryDebitByPageRequest[]{page};
//		}
//
//		int len = (int) (count / size);
//		int mo = (int) (count % size);
//		if (mo > 0)
//			len++;
//
//		arr = new QueryDebitByPageRequest[len];
//		for (int i = 0; i < len; i++) {
//			QueryDebitByPageRequest page = this.mapperFacade.map(request, request.getClass());
////			page.setPageNum(i);
//			page.setPageSize(size);
//			page.setIds(ids.subList(i * size,i!= len -1?(i+1)* size:(mo>0?ids.size():(i+1)* size)));
//			arr[i] = page;
//		}
//		return arr;
//	}
}
